From 4a1478d6d74c7a60508238af24ce29e7e94a64d0 Mon Sep 17 00:00:00 2001 From: Richard Hult Date: Mon, 3 Dec 2007 19:34:30 +0000 Subject: [PATCH] Don't crash when a parent relative bg pixmap is set, and no parent has a 2007-12-03 Richard Hult * gdk/quartz/gdkwindow-quartz.c: (gdk_window_impl_quartz_begin_paint_region): Don't crash when a parent relative bg pixmap is set, and no parent has a bg pixmap. Fixes bug #500804. svn path=/trunk/; revision=19100 --- ChangeLog | 7 +++++++ gdk/quartz/gdkwindow-quartz.c | 12 +++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index fb810c0160..50b34ad4d0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2007-12-03 Richard Hult + + * gdk/quartz/gdkwindow-quartz.c: + (gdk_window_impl_quartz_begin_paint_region): Don't crash when a + parent relative bg pixmap is set, and no parent has a bg + pixmap. Fixes bug #500804. + 2007-12-03 Matthias Clasen Two optimizations for icon cache lookups. diff --git a/gdk/quartz/gdkwindow-quartz.c b/gdk/quartz/gdkwindow-quartz.c index e3e97a9d7c..d128f2c32f 100644 --- a/gdk/quartz/gdkwindow-quartz.c +++ b/gdk/quartz/gdkwindow-quartz.c @@ -209,7 +209,7 @@ gdk_window_impl_quartz_begin_paint_region (GdkPaintable *paintable, x_offset = y_offset = 0; window = GDK_WINDOW (drawable_impl->wrapper); - while (window && ((GdkWindowObject *) window)->bg_pixmap == GDK_PARENT_RELATIVE_BG) + while (window && bg_pixmap == GDK_PARENT_RELATIVE_BG) { /* If this window should have the same background as the parent, * fetch the parent. (And if the same goes for the parent, fetch @@ -218,6 +218,16 @@ gdk_window_impl_quartz_begin_paint_region (GdkPaintable *paintable, x_offset += ((GdkWindowObject *) window)->x; y_offset += ((GdkWindowObject *) window)->y; window = GDK_WINDOW (((GdkWindowObject *) window)->parent); + bg_pixmap = ((GdkWindowObject *) window)->bg_pixmap; + } + + if (bg_pixmap == NULL || bg_pixmap == GDK_NO_BG || bg_pixmap == GDK_PARENT_RELATIVE_BG) + { + /* Parent relative background but the parent doesn't have a + * pixmap. + */ + g_free (rects); + return; } /* Note: There should be a CG API to draw tiled images, we might -- 2.30.2